package GUI;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;

import Controlador.AtualizaItens;
import Controlador.ConfiguraDadosExibidosTabela;
import Controlador.ObterComissoesAcumulado;
import Controlador.ObterComissoesMedia;
import Controlador.ObterComissoesPorMes;
import Controlador.RecuperaItens;
import Excecoes.ExececaoCategoriaVendedorIncorreta;
import Excecoes.TratamentoExcecoes;
import Utils.TransformaStringEmInt;

public class InterfaceComUsuario {

	protected Shell shell;  
	private Text nomeArquivoProdutos;
	private String fn = new String();
	private Text nomeArquivoVendedores;
	private Text nomeArquivoPreco;
	private Text nomeArquivoVendas;
	private Text mesEscolhido;
	private Text anoEscolhido;
	private Table tabelaComissaoPorMes;
	private Text mesInicialEscolhido;
	private Text anoInicialEscolhido;
	private Text mesFinalEscolhido;
	private Text anoFinalEscolhido;
	private Table tabelaComissaoAcumulado;
	private Button btnUploadArquivoProdutos;
	private Text text_1;
	private Text anoInicialEscolhidoMedia;
	private Text mesFinalEscolhidoMedia;
	private Text anoFinalEscolhidoMedia;
	private Table tabelaComissaoMedia;

	public static void main(String[] args) {
		try {
			RecuperaItens.recuperaItens();
			InterfaceComUsuario window = new InterfaceComUsuario();
			window.open();
		} catch (IOException e) {
			//
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ExececaoCategoriaVendedorIncorreta e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	protected void createContents() {
		shell = new Shell();
		shell.setSize(556, 381);
		shell.setText("SWT Application");
		
		Composite composite = new Composite(shell, SWT.NONE);
		composite.setBounds(10, 10, 520, 310);
		
		TabFolder tabFolder = new TabFolder(composite, SWT.NONE);
		tabFolder.setBounds(0, 0, 519, 325);
		
		TabItem tbtmProdutos = new TabItem(tabFolder, SWT.NONE);
		tbtmProdutos.setText("Produtos");
		
		Composite composite_1 = new Composite(tabFolder, SWT.NONE);
		tbtmProdutos.setControl(composite_1);
		
		nomeArquivoProdutos = new Text(composite_1, SWT.BORDER);
		nomeArquivoProdutos.setBounds(132, 67, 168, 25);
		
		btnUploadArquivoProdutos = new Button(composite_1, SWT.NONE);
		btnUploadArquivoProdutos.setBounds(132, 110, 167, 25);
		btnUploadArquivoProdutos.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				FileDialog dlg = new FileDialog(shell, SWT.OPEN);
				fn = dlg.open();
				nomeArquivoProdutos.setText(fn);
			}
		});
		btnUploadArquivoProdutos.setText("Selecionar Arquivo");
		
		Button btnOkUploadArquivoProdutos = new Button(composite_1, SWT.NONE);
		btnOkUploadArquivoProdutos.setBounds(170, 168, 75, 25);
		btnOkUploadArquivoProdutos.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				try {
					AtualizaItens.atualizaProdutos(fn);
					ExibeAlerta.exibeAlerta(Mensagens.mensagemDadosAtualizados);
				} catch (IOException e1) {
					TratamentoExcecoes.trataExcecaoLeituraEscritaDeArquivo();
				} catch (ParseException e1) {
					TratamentoExcecoes.trataExcecaoParseData();
				} catch (ExececaoCategoriaVendedorIncorreta e1) {
					TratamentoExcecoes.trataExececaoCategoriaVendedorIncorreta();
				}
			}
		});
		btnOkUploadArquivoProdutos.setText("Ok");
		
		TabItem tbtmVendedores = new TabItem(tabFolder, SWT.NONE);
		tbtmVendedores.setText("Vendedores");
		
		Composite composite_2 = new Composite(tabFolder, SWT.NONE);
		tbtmVendedores.setControl(composite_2);
		
		nomeArquivoVendedores = new Text(composite_2, SWT.BORDER);
		nomeArquivoVendedores.setBounds(152, 80, 143, 21);
		
		Button btnUploadArquivoVendedores = new Button(composite_2, SWT.NONE);
		btnUploadArquivoVendedores.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				FileDialog dlg = new FileDialog(shell, SWT.OPEN);
				fn = dlg.open();
				nomeArquivoVendedores.setText(fn);
			}
		});
		btnUploadArquivoVendedores.setBounds(152, 120, 143, 25);
		btnUploadArquivoVendedores.setText("Selecionar Arquivo");
		
		Button btnOkUploadArquivoVendedores = new Button(composite_2, SWT.NONE);
		btnOkUploadArquivoVendedores.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				try {
					AtualizaItens.atualizaVendedores(fn);
					ExibeAlerta.exibeAlerta(Mensagens.mensagemDadosAtualizados);
				} catch (IOException e1) {
					TratamentoExcecoes.trataExcecaoLeituraEscritaDeArquivo();
				} catch (ParseException e1) {
					TratamentoExcecoes.trataExcecaoParseData();
				} catch (ExececaoCategoriaVendedorIncorreta e1) {
					TratamentoExcecoes.trataExececaoCategoriaVendedorIncorreta();
				}
			}
		});
		btnOkUploadArquivoVendedores.setBounds(184, 173, 75, 25);
		btnOkUploadArquivoVendedores.setText("Ok");
		
		TabItem tbtmPreo = new TabItem(tabFolder, SWT.NONE);
		tbtmPreo.setText("Pre\u00E7os");
		
		Composite composite_3 = new Composite(tabFolder, SWT.NONE);
		tbtmPreo.setControl(composite_3);
		
		nomeArquivoPreco = new Text(composite_3, SWT.BORDER);
		nomeArquivoPreco.setBounds(166, 85, 105, 21);
		
		Button btnUploadArquivoPreco = new Button(composite_3, SWT.NONE);
		btnUploadArquivoPreco.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				FileDialog dlg = new FileDialog(shell, SWT.OPEN);
				fn = dlg.open();
				nomeArquivoPreco.setText(fn);
			}
		});
		btnUploadArquivoPreco.setBounds(166, 120, 105, 21);
		btnUploadArquivoPreco.setText("Selecionar Pre\u00E7o");
		
		Button btnOkUploadArquivoPrecos = new Button(composite_3, SWT.NONE);
		btnOkUploadArquivoPrecos.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				try {
					AtualizaItens.atualizaPrecos(fn);
					ExibeAlerta.exibeAlerta(Mensagens.mensagemDadosAtualizados);
				} catch (IOException e1) {
					TratamentoExcecoes.trataExcecaoLeituraEscritaDeArquivo();
				} catch (ParseException e1) {
					TratamentoExcecoes.trataExcecaoParseData();
				} catch (ExececaoCategoriaVendedorIncorreta e1) {
					TratamentoExcecoes.trataExececaoCategoriaVendedorIncorreta();
				}
			}
		});
		btnOkUploadArquivoPrecos.setBounds(181, 161, 75, 25);
		btnOkUploadArquivoPrecos.setText("OK");
		
		TabItem tbtmVendas = new TabItem(tabFolder, SWT.NONE);
		tbtmVendas.setText("Vendas");
		
		Composite composite_4 = new Composite(tabFolder, SWT.NONE);
		tbtmVendas.setControl(composite_4);
		
		nomeArquivoVendas = new Text(composite_4, SWT.BORDER);
		nomeArquivoVendas.setBounds(159, 80, 121, 21);
		
		Button btnUploadArquivoVendas = new Button(composite_4, SWT.NONE);
		btnUploadArquivoVendas.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				FileDialog dlg = new FileDialog(shell, SWT.OPEN);
				fn = dlg.open();
				nomeArquivoVendas.setText(fn);
			}
		});
		btnUploadArquivoVendas.setBounds(160, 111, 120, 25);
		btnUploadArquivoVendas.setText("Selecionar Arquivo");
		
		Button btnOkUploadArquivoVendas = new Button(composite_4, SWT.NONE);
		btnOkUploadArquivoVendas.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				try {
					AtualizaItens.atualizaVendas(fn);
					ExibeAlerta.exibeAlerta(Mensagens.mensagemDadosAtualizados);
				} catch (IOException e1) {
					TratamentoExcecoes.trataExcecaoLeituraEscritaDeArquivo();
				} catch (ParseException e1) {
					TratamentoExcecoes.trataExcecaoParseData();
				} catch (ExececaoCategoriaVendedorIncorreta e1) {
					TratamentoExcecoes.trataExececaoCategoriaVendedorIncorreta();
				}
			}
		});
		btnOkUploadArquivoVendas.setBounds(183, 159, 75, 25);
		btnOkUploadArquivoVendas.setText("OK");
		
		TabItem tbtmComissesms = new TabItem(tabFolder, SWT.NONE);
		tbtmComissesms.setText("Comiss\u00F5es/M\u00EAs");
		
		Composite composite_5 = new Composite(tabFolder, SWT.NONE);
		tbtmComissesms.setControl(composite_5);
		composite_5.setLayout(new FormLayout());
		
		mesEscolhido = new Text(composite_5, SWT.BORDER);
		FormData fd_mesEscolhido = new FormData();
		mesEscolhido.setLayoutData(fd_mesEscolhido);
		
		anoEscolhido = new Text(composite_5, SWT.BORDER);
		fd_mesEscolhido.top = new FormAttachment(anoEscolhido, 0, SWT.TOP);
		fd_mesEscolhido.right = new FormAttachment(anoEscolhido, -55);
		FormData fd_anoEscolhido = new FormData();
		fd_anoEscolhido.top = new FormAttachment(0, 38);
		fd_anoEscolhido.left = new FormAttachment(0, 248);
		anoEscolhido.setLayoutData(fd_anoEscolhido);
		
		Button btnOkComissaoMes = new Button(composite_5, SWT.NONE);
		btnOkComissaoMes.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				try{
					int mes = TransformaStringEmInt.transformaTextoEmInt(mesEscolhido.getText());
					int ano = TransformaStringEmInt.transformaTextoEmInt(anoEscolhido.getText());
					ObterComissoesPorMes obterComissoesPorMes = new ObterComissoesPorMes(RecuperaItens.getVendedores());
					obterComissoesPorMes.obterComissoes(mes, ano);
					configuraTabela(ConfiguraDadosExibidosTabela.totaisComissaoVenda, tabelaComissaoPorMes);
				}catch(NumberFormatException e1){
					TratamentoExcecoes.trataExcecaoParseInt();
					return;
				}
			}
		});
		FormData fd_btnOkComissaoMes = new FormData();
		fd_btnOkComissaoMes.left = new FormAttachment(0, 186);
		fd_btnOkComissaoMes.right = new FormAttachment(100, -192);
		btnOkComissaoMes.setLayoutData(fd_btnOkComissaoMes);
		btnOkComissaoMes.setText("OK");
		
		tabelaComissaoPorMes = new Table(composite_5, SWT.BORDER | SWT.FULL_SELECTION);
		fd_btnOkComissaoMes.bottom = new FormAttachment(100, -201);
		FormData fd_tabelaComissaoPorMes = new FormData();
		fd_tabelaComissaoPorMes.top = new FormAttachment(btnOkComissaoMes, 6);
		fd_tabelaComissaoPorMes.left = new FormAttachment(0, 75);
		fd_tabelaComissaoPorMes.bottom = new FormAttachment(100, -30);
		fd_tabelaComissaoPorMes.right = new FormAttachment(100, -75);
		tabelaComissaoPorMes.setLayoutData(fd_tabelaComissaoPorMes);
		tabelaComissaoPorMes.setHeaderVisible(true);
		tabelaComissaoPorMes.setLinesVisible(true);

		TableColumn tblclmnVendedor = new TableColumn(tabelaComissaoPorMes, SWT.NONE);
		tblclmnVendedor.setWidth(151);
		tblclmnVendedor.setText("Vendedor");
		
		TableColumn tblclmnVendas = new TableColumn(tabelaComissaoPorMes, SWT.NONE);
		tblclmnVendas.setWidth(60);
		tblclmnVendas.setText("Vendas");
		
		TableColumn tblclmnComisses = new TableColumn(tabelaComissaoPorMes, SWT.NONE);
		tblclmnComisses.setWidth(72);
		tblclmnComisses.setText("Comiss\u00E3o");
		
		Label lblMs = new Label(composite_5, SWT.NONE);
		FormData fd_lblMs = new FormData();
		fd_lblMs.bottom = new FormAttachment(mesEscolhido, -6);
		fd_lblMs.left = new FormAttachment(mesEscolhido, 0, SWT.LEFT);
		lblMs.setLayoutData(fd_lblMs);
		lblMs.setText("M\u00EAs");
		
		Label lblAno = new Label(composite_5, SWT.NONE);
		FormData fd_lblAno = new FormData();
		fd_lblAno.bottom = new FormAttachment(anoEscolhido, -6);
		fd_lblAno.left = new FormAttachment(anoEscolhido, 0, SWT.LEFT);
		lblAno.setLayoutData(fd_lblAno);
		lblAno.setText("Ano");
		
		TabItem tbtmVendedoracumulado = new TabItem(tabFolder, SWT.NONE);
		tbtmVendedoracumulado.setText("Comiss\u00F5es/Acumulado");
		
		Composite composite_6 = new Composite(tabFolder, SWT.NONE);
		tbtmVendedoracumulado.setControl(composite_6);
		
		mesInicialEscolhido = new Text(composite_6, SWT.BORDER);
		mesInicialEscolhido.setBounds(36, 36, 76, 21);
		
		anoInicialEscolhido = new Text(composite_6, SWT.BORDER);
		anoInicialEscolhido.setBounds(185, 36, 76, 21);
		
		Button btnOkComissoAcumulado = new Button(composite_6, SWT.NONE);
		btnOkComissoAcumulado.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				int mesInicial, mesFinal, anoInicial, anoFinal;
				try{
					mesInicial = TransformaStringEmInt.transformaTextoEmInt(mesInicialEscolhido.getText());
					mesFinal = TransformaStringEmInt.transformaTextoEmInt(mesFinalEscolhido.getText());
					anoInicial = TransformaStringEmInt.transformaTextoEmInt(anoInicialEscolhido.getText());
					anoFinal = TransformaStringEmInt.transformaTextoEmInt(anoFinalEscolhido.getText());
				}catch(NumberFormatException e1){
					ExibeAlerta.exibeAlerta(Mensagens.mensagemErroParseInt);
					return;
				}
				ObterComissoesAcumulado obterComissoesAcumulado = new ObterComissoesAcumulado(RecuperaItens.getVendedores());
				obterComissoesAcumulado.obterComissoes(mesInicial, mesFinal, anoInicial, anoFinal);
				configuraTabela(ConfiguraDadosExibidosTabela.totaisComissaoVenda, tabelaComissaoAcumulado);
			}
		});
		btnOkComissoAcumulado.setBounds(301, 59, 75, 25);
		btnOkComissoAcumulado.setText("OK");
		
		mesFinalEscolhido = new Text(composite_6, SWT.BORDER);
		mesFinalEscolhido.setBounds(36, 85, 76, 21);
		
		anoFinalEscolhido = new Text(composite_6, SWT.BORDER);
		anoFinalEscolhido.setBounds(185, 85, 76, 21);
		
		Label lblMesInicial = new Label(composite_6, SWT.NONE);
		lblMesInicial.setBounds(36, 15, 55, 15);
		lblMesInicial.setText("Mes Inicial");
		
		Label lblMesFinal = new Label(composite_6, SWT.NONE);
		lblMesFinal.setBounds(36, 64, 55, 15);
		lblMesFinal.setText("Mes Final");
		
		Label lblAnoInicial = new Label(composite_6, SWT.NONE);
		lblAnoInicial.setBounds(187, 15, 55, 15);
		lblAnoInicial.setText("Ano Inicial");
		
		Label lblAnoFinal = new Label(composite_6, SWT.NONE);
		lblAnoFinal.setBounds(185, 64, 55, 15);
		lblAnoFinal.setText("Ano Final");
		
		tabelaComissaoAcumulado = new Table(composite_6, SWT.BORDER | SWT.FULL_SELECTION);
		tabelaComissaoAcumulado.setLinesVisible(true);
		tabelaComissaoAcumulado.setHeaderVisible(true);
		tabelaComissaoAcumulado.setBounds(36, 122, 292, 165);
		
		TableColumn tableColumn = new TableColumn(tabelaComissaoAcumulado, SWT.NONE);
		tableColumn.setWidth(151);
		tableColumn.setText("Vendedor");
		
		TableColumn tableColumn_1 = new TableColumn(tabelaComissaoAcumulado, SWT.NONE);
		tableColumn_1.setWidth(60);
		tableColumn_1.setText("Vendas");
		
		TableColumn tableColumn_2 = new TableColumn(tabelaComissaoAcumulado, SWT.NONE);
		tableColumn_2.setWidth(72);
		tableColumn_2.setText("Comiss\u00E3o");
		
		TabItem tbtmComissesmedia = new TabItem(tabFolder, SWT.NONE);
		tbtmComissesmedia.setText("Comiss\u00F5es/Media");
		
		Composite mesInicialEscolhidoMedia = new Composite(tabFolder, SWT.NONE);
		tbtmComissesmedia.setControl(mesInicialEscolhidoMedia);
		
		text_1 = new Text(mesInicialEscolhidoMedia, SWT.BORDER);
		text_1.setBounds(20, 31, 76, 21);
		
		anoInicialEscolhidoMedia = new Text(mesInicialEscolhidoMedia, SWT.BORDER);
		anoInicialEscolhidoMedia.setBounds(172, 31, 76, 21);
		
		mesFinalEscolhidoMedia = new Text(mesInicialEscolhidoMedia, SWT.BORDER);
		mesFinalEscolhidoMedia.setBounds(20, 81, 76, 21);
		
		anoFinalEscolhidoMedia = new Text(mesInicialEscolhidoMedia, SWT.BORDER);
		anoFinalEscolhidoMedia.setBounds(172, 81, 76, 21);
		
		Button btnOkComissoMedia = new Button(mesInicialEscolhidoMedia, SWT.NONE);
		btnOkComissoMedia.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				int mesInicial, mesFinal, anoInicial, anoFinal;
				try{
					mesInicial = TransformaStringEmInt.transformaTextoEmInt(text_1.getText());
					anoInicial = TransformaStringEmInt.transformaTextoEmInt(anoInicialEscolhidoMedia.getText());
					mesFinal = TransformaStringEmInt.transformaTextoEmInt(mesFinalEscolhidoMedia.getText());
					anoFinal = TransformaStringEmInt.transformaTextoEmInt(anoFinalEscolhidoMedia.getText());
				}catch(NumberFormatException e1){
					ExibeAlerta.exibeAlerta(Mensagens.mensagemErroParseInt);
					return;
				}
				ObterComissoesMedia obterComissoesMedia = new ObterComissoesMedia(RecuperaItens.getVendedores());
				obterComissoesMedia.obterComissoes(mesInicial, mesFinal, anoInicial, anoFinal);
				configuraTabela(ConfiguraDadosExibidosTabela.totaisComissaoVenda, tabelaComissaoMedia);
			}
		});
		btnOkComissoMedia.setBounds(301, 50, 75, 25);
		btnOkComissoMedia.setText("OK");
		
		tabelaComissaoMedia = new Table(mesInicialEscolhidoMedia, SWT.BORDER | SWT.FULL_SELECTION);
		tabelaComissaoMedia.setBounds(20, 112, 324, 160);
		tabelaComissaoMedia.setHeaderVisible(true);
		tabelaComissaoMedia.setLinesVisible(true);
		
		TableColumn tblclmnVendedor_1 = new TableColumn(tabelaComissaoMedia, SWT.NONE);
		tblclmnVendedor_1.setWidth(191);
		tblclmnVendedor_1.setText("Vendedor");
		
		TableColumn tblclmnVendas_1 = new TableColumn(tabelaComissaoMedia, SWT.NONE);
		tblclmnVendas_1.setWidth(52);
		tblclmnVendas_1.setText("Vendas");
		
		TableColumn tblclmnComisso = new TableColumn(tabelaComissaoMedia, SWT.NONE);
		tblclmnComisso.setWidth(66);
		tblclmnComisso.setText("Comiss\u00E3o");
		
		Label lblMsInicial = new Label(mesInicialEscolhidoMedia, SWT.NONE);
		lblMsInicial.setBounds(20, 10, 55, 15);
		lblMsInicial.setText("M\u00EAs Inicial");
		
		Label lblAnoInicial_1 = new Label(mesInicialEscolhidoMedia, SWT.NONE);
		lblAnoInicial_1.setBounds(172, 10, 55, 15);
		lblAnoInicial_1.setText("Ano Inicial");
		
		Label lblMsFinal = new Label(mesInicialEscolhidoMedia, SWT.NONE);
		lblMsFinal.setBounds(20, 60, 55, 15);
		lblMsFinal.setText("M\u00EAs Final");
		
		Label lblAnoFinal_1 = new Label(mesInicialEscolhidoMedia, SWT.NONE);
		lblAnoFinal_1.setBounds(172, 60, 55, 15);
		lblAnoFinal_1.setText("Ano Final");
	}

	public void configuraTabela(List<String[]> dados, Table table){
		table.removeAll();
		for(String[] dado : dados){
			TableItem item = new TableItem(table, SWT.NULL);
			item.setText(0, dado[0]);
			item.setText(1, dado[1]);
			item.setText(2, dado[2]);
		}
	}
}
